home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er Special 33
/
64er_Magazin_Sonderheft_33_19xx_Markt__Technik_de_Side_A.d64
/
quellcode giga
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
7KB
|
290 lines
10 ;*********************************
20 ;
30 ; modern erase
40 ; usrusrusrusrusrusrusrusrusrusrusrusr
50 ; (c) 1988 by dirk neumeister
60 ;
70 ; size : $c000
80 ; laenge : 382 byte
90 ; source : 6515 byte
100 ;
110 ;*********************************
120 ;
130 ;
140 +$c000
150 ;
160 tab(vic=53248
170 tab(cia2=$dd00
180 tab(bild=648
190 tab(bild1=$0400
200 tab(bild2=$c400
210 ;
220 tosatz=$d000
230 toziel=$e000
240 tozeiger=$fa
250 topointer=$fd
260 toclear=$e544
270 toflag=$fc
280 tokomma=$aefd
290 togetbyte=$b79e
300 toget=$0073
310 ;
320 ;
330 ;
340 ;*********************************
350 ;
360 ; auswertung des sys-befehls
370 ;
380 ; sys 49152 => loeschen/anzeigen
390 ;
400 ; sys 49152,a,b,c,d,e,f,g,h
410 ;
420 ; => reihenfolge festlegen
430 ;
440 ;*********************************
450 ;
460 ;
500 start mid$#","; test auf komma
510 len#00
520 str$($7a),y
530 (NULL)start3; wenn nein, dann direkt starten
540 peek#08; sonst acht zahlen, die die reihenfolge angeben
550 (NULL)$f7
560 start2 (NULL)komma
570 (NULL)getbyte; einlesen und
580 (NULL)
590 peek$f7
600 (NULL)reihenfol,x; speichern
610 chr$$f7
620 (NULL)start2
630 start3 (NULL)zclear; selbst modifz. code (jmp ($4c) = loeschen,
640 ; ; bit ($2a) = laden )
650 ;
660 ;
670 ;
680 ;*********************************
690 ;
700 ; vorbereitung der modern-routine
710 ;
720 ; zum anzeigen
730 ;
740 ;*********************************
750 ;
760 ;
1000 zladen pokexyclose(ladebit),variab+1; adr. verkn.byte zum anzeigen schreiben
1010 pokexclose$31,modern2-3; programm fuer zeichensatzlesen aendern
1020 pokexyclose$d000,$fd; startadresse zeichensatz
1030 pokexyclose$e000,$fa; endadresse zeichensatz
1040 pokexclose$11,oder; oder-verknuepung zulassen
1050 pokexclose$a9,lda; lda-befehl erlauben
1060 pokexclose$08,flag; flag fuer acht durchlaeufe setzen
1070 (NULL)modern; die eigentliche routine aufrufen
1080 verschiebeclose$c400,$c800,$0800
1090 bild0400; und wieder auf originalbildschirm umschalten
1100 pokeaclose$4c,start3; jmp-befehl erlauben => sys49152 = loeschen
1110 (NULL)
1120 ;
1130 ;
1140 ;
1150 ;*********************************
1160 ;
1170 ; vorbereitung der modern-routine
1180 ;
1190 ; zum loeschen
1200 ;
1210 ;*********************************
1220 ;
1230 ;
2000 zclear ramclose$31; zeichensatz kopieren
2010 copyclosesatz,$02,ziel,$04,4
2020 rom
2030 verschiebeclose$0400,$0800,$c800;bildschirm kopieren
2040 bildc400; und nach $c400 umschalten
2050 pokeaxclose(loeschbit),variab+1; auf zeichen loeschen umschalten
2060 pokexclose$34,modern2-3; zugriff auf rom und nicht auf zeichensatz
2070 pokexyclose$e000,$fa; zeichensatz bei $e000 kennzeichnen
2080 pokexyclose$e000,$fd
2090 pokexclose$24,oder; oder-verkuepfung unterbinden (oder => bit ($24))
2100 pokexclose$24,lda; lda-verknuepfung verbieten (lda => bit ($24))
2110 pokexclose$08,flag; flag fuer acht durchlaeufe setzen
2120 (NULL)modern; die eigentliche routine aufrufen
2130 (NULL)clear; bildschirm loeschen
2140 pokeaclose$2a,start3; bei naechsten aufruf: 'zeichen laden'(kein jmp)
2150 (NULL)
2160 ;
2170 ;
2180 ;
2190 ;*********************************
2200 ;
2210 ; eigentliche routine zum
2220 ;
2230 ; loeschen und erscheinen lassen
2240 ;
2250 ;*********************************
2260 ;
2270 ;
3000 modern ramclose$34; ram/zeichensatz einschalten
3010 modern2 mid$reihenfol,x; verknuepfungsbyte in abhaengigkeit der zu
3020 (NULL); bearbeitenden speicherstelle und
3030 variab mid$ladebit,y; reihenfolge laden
3040 len#00
3050 asc(pointer),y; und mit der speicherstelle verknuepfen
3060 oder (NULL)(zeiger),y; (loeschen: nur 'and', laden: 'and' & 'ora')
3070 (NULL)(zeiger),y
3080 (NULL)
3090 (NULL)modern3; x um eins erniedrigen, wenn kleiner als 1, dann
3100 peek#08; wieder auf 8 setzen
3110 modern3 right$zeiger; zeiger um eins erhoehen
3120 right$pointer
3130 (NULL)modern4
3140 right$zeiger+1
3150 right$pointer+1
3160 modern4 mid$zeiger+1; test ob alle speicherstellen bearbeitet wurden
3170 str$#$f0
3180 (NULL)modern2; wenn nein, dann wieder zurueck und weitermachen
3190 pokeaclose$e0,zeiger+1; zeiger wieder zurueckstellen
3200 lda pokeaclose$d0,pointer+1
3210 (NULL); reihenfolge der verknuefungsbyte um 1 verringern
3220 (NULL)modern5
3230 peek#08
3240 modern5 lenflag; test, ob der zeichensatz schon acht mal
3250 (NULL); bearbeitet worden ist
3260 (NULL)flag
3270 (NULL)modern2; wenn nein, dann weiter
3280 rom; sonst rom wieder einschalten
3290 (NULL); und ruecksprung
3300 ;
3310 ;
3320 ;
3330 ;*********************************
3340 ;
3350 ; tabellen
3360 ;
3370 ; - verknuepfungsbyte zum loeschen
3380 ;
3390 ; - verknuepfungsbyte zum anzeigen
3400 ;
3410 ; - reihenfolge der anwendung
3420 ;
3430 ;*********************************
3440 ;
3450 ;
10000 loeschbit fn127,191,223,239,247,251,253,254
10010 ladebit fn128,64,32,16,8,4,2,1
10020 reihenfol fn0,0,7,1,6,2,5,3,4
10030 ;
10040 ;
10050 ;
10060 ;*********************************
10070 ;
10080 ; m a k r o s
10090 ;
10100 ; low level : - pokeax
10110 ; - pokexy
10120 ; - pokea
10130 ; - pokex
10140 ;
10150 ; high level: - bildc400
10160 ; - bild0400
10170 ; - rom
10180 ; - ram
10190 ; - verschiebe
10200 ; - copy
10210 ;
10220 ;*********************************
10230 ;
10240 ;
30000 getpokeaxclosevar,adr; 16-bit wert schrieben (verwendete register: a,x)
30010 mid$#<(var)
30020 peek#>(var)
30030 (NULL)adr
30040 (NULL)adr+1
30050 new
30060 ;
30070 getpokexyclosevar,adr; 16-bit wert schreiben (verwendete register: x,y)
30080 peek#<(var)
30090 len#>(var)
30100 (NULL)adr
30110 (NULL)adr+1
30120 new
30130 ;
30140 getpokeaclosevar,adr; 8-bit wert schreiben (verwendetes register: a)
30150 mid$#var
30160 (NULL)adr
30170 new
30180 ;
30190 getpokexclosevar,adr; 8-bit wert schreiben (verwendetes register: x)
30200 peek#var
30210 (NULL)adr
30220 new
30230 ;
30240 ;* * * * * * * * * * * * * * * * *
30250 ;
30260 getbildc400; bildschirm im bereich $c400 einschalten
30270 mid$cia2
30280 asc#252
30290 (NULL)cia2
30300 pokexclose196,bild
30310 mid$vic+24
30320 asc#$f3
30330 (NULL)#24
30340 (NULL)vic+24
30350 new
30360 ;
30370 getbild0400; bildschirm im bereich $0400 einschalten
30380 mid$cia2
30390 (NULL)#03
30400 (NULL)cia2
30410 pokexclose04,bild
30420 mid$vic+24
30430 asc#$f3
30440 (NULL)#20
30450 (NULL)vic+24
30460 new
30470 ;
30480 getverschiebecloseanfang,ende,nach; rom verschiebe-routine aufrufen
30490 pokexycloseanfang,$5f
30500 pokexycloseende,$5a
30510 pokexyclosenach,$58
30520 (NULL)$a3bf
30530 new
30540 ;
30550 getrom; auf rom umschalten
30560 (NULL)
30570 (NULL)$01
30580 (NULL)
30590 new
30600 ;
30610 getramclosevar; auf ram/zeichensatz umschalten
30620 (NULL)
30630 mid$$01
30640 (NULL)
30650 pokeaclosevar,$01
30660 new
30670 ;
30680 getcopyclosebeginn,var1,ende,var2,laenge; 16-bit verschiebe-routine
30690 pokeaxclose(beginn),var1
30700 pokeaxclose(ende),var2
30710 peek#laenge*8
30720 len#00
30730 copy1 mid$(var1),y
30740 (NULL)(var2),y
30750 (NULL)
30760 (NULL)copy1
30770 right$var1+1
30780 right$var2+1
30790 (NULL)
30800 (NULL)copy1
30810 new
30820 ;
30830 ;
30840 ;
30850 ;*********************************
30860 ;
30870 ; ende des quellcode-listings
30880 ;
30890 ;*********************************
30900 ;
30910 ;
60000 <